package juanca.mole;

import java.util.ArrayList;
import java.util.Calendar;

import java.util.HashMap;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import ClasesExtras.AdaptadorMaquinas;
import ClasesExtras.GetIpAddress;
import ClasesExtras.ItemPartesMaquina;
import ClasesExtras.ValidacionCampos;
import ClasesExtras.handlerAlertMessage;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RadioButton;

import android.widget.Spinner;
import android.widget.TimePicker;
import android.widget.Toast;

import com.savagelook.android.JsonHelper;

public class LavadoMaquina extends Activity {

	Bundle savedInstanceState;
	private int fAno;
	private int fMes;
	private int fDia;
	private int hMinuto;
	private int hHora;
	private boolean SALIR;
	private boolean condicion;
	private String fechaUsuario;
	private String tiempoUsuario;
	private String fechaSistema;
	private String tiempoSistema;
	private String idEmpleado;
	private String passwEmpleado;
	private String idOperarioEmpleado;
	private String acciones;
	private String maquina;
	private String desinfectante;
	private String maq;
	private String itemComponent[][];
	private handlerAlertMessage manejadorMensajes;
	private Activity activity;
	private LavadoMaquina self = this;

	public String date;
	public String time;
	public ValidacionCampos validarcampos = new ValidacionCampos();
	public HashMap<String, Integer> desinfectanteId;
	public HashMap<String, Integer> maquinasId;
	public Spinner spiDesinfecMaq;
	public ProgressDialog progressDialog;

	private RadioButton rbAptoLavMaq;
	private RadioButton rbNoAptoLavMaq;

	private EditText etAccLavMaq;
	private Spinner SpiMaquinas;

	public static final int DATE_DIALOG_ID = 0;
	public static final int TIME_DIALOG_ID = 1;
	public static final String STRING_EMPTY = "";
	private String URL_PARTES_MAQUINAS;
	private String URL_DESINFECTANTES;
	private String URL_VALIDAR_USUARIO;
	private String URL_REGISTRO_INSPECCION_MAQUINA;

	private static final String CNV = "cnv";
	private static final String PNV = "pnv";
	private static final String no_permiso = "no_permiso";

	// Se crea un ArrayList de tipo partes//
	ArrayList<ItemPartesMaquina> Lista_maq;
	// Se crea una objeto tipo ListView
	ListView lvPartMaq;
	AdaptadorMaquinas adaptador;

	// Se crea un objeto de tipo AdaptadorMaquinas

	/**
	 * @return the sALIR
	 */
	public boolean isSALIR() {
		return SALIR;
	}

	/**
	 * @param sALIR
	 *            the sALIR to set
	 */
	public void setSALIR(boolean sALIR) {
		SALIR = sALIR;
	}

	/**
	 * @return the desinfectante
	 */
	public String getDesinfectante() {
		return desinfectante;
	}

	/**
	 * @param desinfectante
	 *            the desinfectante to set
	 */
	public void setDesinfectante(String desinfectante) {
		this.desinfectante = desinfectante;

	}

	/**
	 * @return the idOperarioEmpleado
	 */
	public String getIdOperarioEmpleado() {
		return idOperarioEmpleado;
	}

	/**
	 * @param idOperarioEmpleado
	 *            the idOperarioEmpleado to set
	 */
	public void setIdOperarioEmpleado(String idOperarioEmpleado) {
		this.idOperarioEmpleado = idOperarioEmpleado;
		this.setSALIR(true);
	}

	/**
	 * @return the maq
	 */
	public String getMaq() {
		return maq;
	}

	/**
	 * @param maq
	 *            the maq to set
	 */
	public void setMaq(String maq) {
		this.maq = maq;

	}

	public String getMaquina() {
		return maquina;
	}

	public void setMaquina(String maquina) {
		this.maquina = maquina;

	}

	public String getAcciones() {
		return acciones;
	}

	public void setAcciones(String acciones) {
		this.acciones = acciones;
		this.setSALIR(true);
	}

	public boolean isCondicion() {
		return condicion;
	}

	public void setCondicion(boolean condicion) {
		this.condicion = condicion;
		this.setSALIR(true);
	}

	public String getIdEmpleado() {
		return idEmpleado;
	}

	public void setIdEmpleado(String idEmpleado) {
		this.idEmpleado = idEmpleado;
		this.setSALIR(true);
	}

	public String getPasswEmpleado() {
		return passwEmpleado;
	}

	public void setPasswEmpleado(String passwEmpleado) {
		this.passwEmpleado = passwEmpleado;
		this.setSALIR(true);
	}

	public String getFechaUsuario() {
		return fechaUsuario;
	}

	public void setFechaUsuario(String fechaUsuario) {
		this.fechaUsuario = fechaUsuario;
		this.setSALIR(true);
	}

	public String getTiempoUsuario() {
		return tiempoUsuario;
	}

	public void setTiempoUsuario(String tiempoUsuario) {
		this.tiempoUsuario = tiempoUsuario;
		this.setSALIR(true);
	}

	public String getFechaSistema() {
		return fechaSistema;
	}

	public void setFechaSistema(String fechaSistema) {
		this.fechaSistema = fechaSistema;
		this.setSALIR(true);
	}

	public String getTiempoSistema() {
		return tiempoSistema;
	}

	public void setTiempoSistema(String tiempoSistema) {
		this.tiempoSistema = tiempoSistema;
		this.setSALIR(true);
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_lavado_maquina);

		getWindow().setSoftInputMode(
				WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

		rbAptoLavMaq = (RadioButton) findViewById(R.id.rbAptoLavMaq);
		rbNoAptoLavMaq = (RadioButton) findViewById(R.id.rbNoAptoLavMaq);
		etAccLavMaq = (EditText) findViewById(R.id.etAccLavMaq);
		lvPartMaq = (ListView) findViewById(R.id.lvPartMaq);
		SpiMaquinas = (Spinner) findViewById(R.id.spiMaqLavMaq);
		spiDesinfecMaq = (Spinner) findViewById(R.id.spiDesinfecMaq);
		manejadorMensajes = new handlerAlertMessage();
		activity = this;
		itemComponent = new String[7][2];

		this.setSALIR(false);

	}

	@Override
	protected void onStart() {
		super.onStart();
		GetIpAddress direccion = new GetIpAddress(this);

		if (direccion.getDireccion() != null) {
			URL_PARTES_MAQUINAS = direccion.getDireccion() + "/maquinas.json";
			URL_DESINFECTANTES = direccion.getDireccion()
					+ "/desinfectantes.json";
			URL_VALIDAR_USUARIO = direccion.getDireccion() + "/validar.json";
			URL_REGISTRO_INSPECCION_MAQUINA = direccion.getDireccion()
					+ "/registro_inspeccion_maquinas.json";

			final ProgressDialog pd = ProgressDialog.show(this, null,
					this.getString(R.string.PbMsjCargando), true, true);

			new Thread(new Runnable() {
				@Override
				public void run() {
					self.mostrarMaquinas(URL_PARTES_MAQUINAS);
					Log.e("ServicioRest", "carga maquinas");

				}
			}).start();

			new Thread(new Runnable() {
				@Override
				public void run() {
					self.mostrarDesinfectantes(URL_DESINFECTANTES);
					Log.e("ServicioRest", "carga desinfectantes");
					pd.dismiss();

				}
			}).start();
		} else {
			new AlertDialog.Builder(this)
					.setIcon(android.R.drawable.ic_dialog_alert)
					.setTitle(R.string.tituloAlerta)
					.setMessage(R.string.msjErSinDireccion)
					.setPositiveButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {// un
								// listener que al pulsar, cierre la
								// aplicacion
								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									// Salir
									Intent intent = new Intent();
									intent.setClass(activity, Etapas.class);
									startActivity(intent);
								}
							}).show();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.layout_lavado_maquina, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle item selection
		switch (item.getItemId()) {
		case R.id.menu_settings:
			if (this.salir()) {

				new AlertDialog.Builder(this)
						.setIcon(android.R.drawable.ic_dialog_alert)
						.setTitle(R.string.tituloAlerta)
						.setMessage(R.string.msjPregunta)
						.setNegativeButton(R.string.btnNo, null)// sin listener
						.setPositiveButton(R.string.btnSi,
								new DialogInterface.OnClickListener() {// un
									// listener que al pulsar, cierre la
									// aplicaci�n
									@Override
									public void onClick(DialogInterface dialog,
											int which) {
										// Salir
										Intent intent = new Intent();
										intent.setClass(activity, Etapas.class);
										startActivity(intent);
									}
								}).show();

				return true;
			} else {
				Intent intent = new Intent();
				intent.setClass(this, Etapas.class);
				startActivity(intent);
			}
		default:
			return super.onOptionsItemSelected(item);
		}
	}

	@SuppressLint("SimpleDateFormat")
	private TimePickerDialog.OnTimeSetListener showtime = new TimePickerDialog.OnTimeSetListener() {

		@SuppressLint("SimpleDateFormat")
		@Override
		public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
			hHora = hourOfDay;
			hMinuto = minute;

			Context context = getApplicationContext();
			CharSequence text = new StringBuilder().append(hHora).append(":")
					.append(hMinuto);
			int duration = Toast.LENGTH_SHORT;

			Toast toast = Toast.makeText(context, text, duration);
			toast.show();

			time = (hHora + ":" + hMinuto).toString();

			setTiempoUsuario(time);

		}
	};

	private DatePickerDialog.OnDateSetListener showdate = new DatePickerDialog.OnDateSetListener() {

		@SuppressLint("SimpleDateFormat")
		@Override
		public void onDateSet(DatePicker view, int year, int monthOfYear,
				int dayOfMonth) {
			fAno = year;
			fMes = monthOfYear + 1;
			fDia = dayOfMonth;

			Context context = getApplicationContext();
			CharSequence text = new StringBuilder().append(fDia).append("-")
					.append(fMes).append("-").append(fAno);
			int duration = Toast.LENGTH_SHORT;

			Toast toast = Toast.makeText(context, text, duration);
			toast.show();

			date = (fDia + "-" + fMes + "-" + fAno + "-").toString();

			setFechaUsuario(date);

		}
	};

	@Override
	protected Dialog onCreateDialog(int id) {
		switch (id) {
		case TIME_DIALOG_ID:
			return new TimePickerDialog(this, showtime, hHora, hMinuto, true);

		case DATE_DIALOG_ID:
			return new DatePickerDialog(this, showdate, fAno, fMes, fDia);
		}
		return null;
	}

	@SuppressWarnings("deprecation")
	public void btnFechaLavMaq(View v) {
		final Calendar c = Calendar.getInstance();
		fAno = c.get(Calendar.YEAR);
		fMes = c.get(Calendar.MONTH);
		fDia = c.get(Calendar.DAY_OF_MONTH);
		showDialog(DATE_DIALOG_ID);

	}

	@SuppressWarnings("deprecation")
	public void btnHoraLavMaq(View v) {

		final Calendar c = Calendar.getInstance();
		hHora = c.get(Calendar.HOUR_OF_DAY);
		hMinuto = c.get(Calendar.MINUTE);
		showDialog(TIME_DIALOG_ID);
	}

	// método que captura la fecha y la hora del sistema
	@SuppressLint("SimpleDateFormat")
	public void fechaHoraSistema() {
		final Calendar c = Calendar.getInstance();
		int ano = c.get(Calendar.YEAR);
		int mes = c.get(Calendar.MONTH) + 1;
		int dia = c.get(Calendar.DAY_OF_MONTH);
		int hora = c.get(Calendar.HOUR_OF_DAY);
		int minuto = c.get(Calendar.MINUTE);

		String date = (dia + "-" + mes + "-" + ano + "-").toString();
		String time = (hora + ":" + minuto).toString();

		this.setFechaSistema(date);
		this.setTiempoSistema(time);

	}

	public void rbLavMaq(View view) {
		// Is the view now checked?
		boolean checked = ((RadioButton) view).isChecked();

		// Check which checkbox was clicked
		switch (view.getId()) {
		case R.id.rbAptoLavMaq:
			if (checked)
				this.setCondicion(checked);

			break;
		case R.id.rbNoAptoLavMaq:
			if (checked)

				this.setCondicion(!checked);
			break;
		}
	}

	// metodo que crear una ventana emergente para registrar el codigo y
	// contrasena
	public void mensajeRegistro() {

		AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(this);
		LayoutInflater inflater = this.getLayoutInflater();
		final View Inflator = inflater
				.inflate(R.layout.registro_empleado, null);
		final EditText ed1 = (EditText) Inflator
				.findViewById(R.id.etIdeEmpleado);
		final EditText ed2 = (EditText) Inflator
				.findViewById(R.id.etPasswEmpleado);
		mensajeEmergente.setTitle(R.string.msjValidarRegistro);
		mensajeEmergente.setView(Inflator);
		mensajeEmergente.setPositiveButton(R.string.btnRegistrar,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						setIdEmpleado(ed1.getText().toString());
						setPasswEmpleado(ed2.getText().toString());

						if (!self.getIdEmpleado().equals(STRING_EMPTY)
								&& !self.getPasswEmpleado()
										.equals(STRING_EMPTY)) {
							progressDialog = new ProgressDialog(self);
							progressDialog.setMessage(self
									.getString(R.string.PbMsjRegistrando));
							progressDialog.setCancelable(true);
							progressDialog.show();

							new Thread(new Runnable() {
								@Override
								public void run() {
									validarUsuario();
									Log.e("ServicioRest",
											"entra validar usuario");

								}
							}).start();

						} else {
							manejadorMensajes.alertMessageOneButton(activity,
									R.string.tituloAlerta,
									R.string.msjIdPasswInvali,
									R.string.btnAceptar);

						}

					}
				});
		mensajeEmergente.setNegativeButton(R.string.btnCancelar,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {

					}
				});
		mensajeEmergente.create();
		mensajeEmergente.show();

	}

	// valida si los campos de usuario estan vacios
	public void validarUsuario() {

		String ced = this.getIdEmpleado();
		String pass = this.getPasswEmpleado();
		HttpClient httpClient = new DefaultHttpClient();
		HttpPost post = new HttpPost(URL_VALIDAR_USUARIO);// operarios
		post.setHeader("content-type", "application/json");

		try {

			// Construimos el objeto en formato JSON
			JSONObject dato = new JSONObject();
			dato.put("cedula", ced);// cedula del operario
			dato.put("password", pass);// contrasena del operario
			dato.put("formulario", "f_inspeccion_maquina");// permisos

			StringEntity entity = new StringEntity(dato.toString());
			post.setEntity(entity);
			HttpResponse resp = httpClient.execute(post);
			this.setIdOperarioEmpleado(EntityUtils.toString(resp.getEntity()));

			if (this.getIdOperarioEmpleado().equals(CNV)) {
				runOnUiThread(new Runnable() {
					public void run() {
						progressDialog.dismiss();
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.tituloAlerta,
								R.string.msjCedulaIncorrecta,
								R.string.btnAceptar);

					}
				});

			} else {
				if (this.getIdOperarioEmpleado().equals(PNV)) {
					runOnUiThread(new Runnable() {
						public void run() {
							progressDialog.dismiss();
							manejadorMensajes.alertMessageOneButton(activity,
									R.string.tituloAlerta,
									R.string.msjPasswordIncorrecta,
									R.string.btnAceptar);

						}
					});

				} else {

					if (this.getIdOperarioEmpleado().equals(no_permiso)) {
						runOnUiThread(new Runnable() {
							public void run() {
								progressDialog.dismiss();
								manejadorMensajes.alertMessageOneButton(
										activity, R.string.tituloAlerta,
										R.string.msjSinPermisos,
										R.string.btnAceptar);

							}
						});
					} else {

						new Thread(new Runnable() {
							@Override
							public void run() {
								self.envioBaseDatos();
								Log.e("ServicioRest", "entra envio basedatos");

							}
						}).start();
					}

				}

			}

		} catch (Exception ex) {
			runOnUiThread(new Runnable() {
				public void run() {
					progressDialog.dismiss();
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloError, R.string.msjERvalidarUsuario,
							R.string.btnAceptar);

				}
			});

		}

	}

	/* Spinner de desinfectantes */
	public void mostrarDesinfectantes(String url) {

		desinfectanteId = new HashMap<String, Integer>();

		try {

			JSONObject desinfec = new JSONObject();
			JSONArray desinfectantes = JsonHelper.getJsonArrayFromUrl(url);

			final ArrayAdapter<String> Lista_desinfectantes = new ArrayAdapter<String>(
					this, android.R.layout.simple_spinner_item);

			for (int j = 0; j < desinfectantes.length(); j++) {
				desinfec = desinfectantes.getJSONObject(j);
				Lista_desinfectantes.add(desinfec.getString("nombre"));
				desinfectanteId.put(desinfec.getString("nombre"),
						Integer.parseInt(desinfec.getString("id")));

			}

			runOnUiThread(new Runnable() {
				public void run() {
					Lista_desinfectantes
							.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
					spiDesinfecMaq.setAdapter(Lista_desinfectantes);
				}
			});

		} catch (Exception e) {
			/*
			 * hilo que muestra el mensaje de error de conexion al cargar los
			 * datos
			 */
			runOnUiThread(new Runnable() {
				public void run() {

					AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
							activity);
					mensajeEmergente.setTitle(R.string.tituloError);
					mensajeEmergente.setMessage(R.string.msjERConexionCargar);
					mensajeEmergente.setNeutralButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {

								public void onClick(DialogInterface dialog,
										int which) {
									LavadoMaquina.this.finish();

								}
							});

					mensajeEmergente.create();
					mensajeEmergente.show();
				}
			});
		}

	}

	/* Spinner de maquinas */
	public void mostrarMaquinas(String url) {
		maquinasId = new HashMap<String, Integer>();

		try {

			JSONObject maquinasJson = new JSONObject();
			JSONArray maquinasJsonArray = JsonHelper.getJsonArrayFromUrl(url);

			final ArrayAdapter<String> Lista_Maquinas = new ArrayAdapter<String>(
					this, android.R.layout.simple_spinner_item);

			for (int j = 0; j < maquinasJsonArray.length(); j++) {
				maquinasJson = maquinasJsonArray.getJSONObject(j);
				Lista_Maquinas.add(maquinasJson.getString("nombre"));
				maquinasId.put(maquinasJson.getString("nombre"),
						Integer.parseInt(maquinasJson.getString("id")));

			}

			runOnUiThread(new Runnable() {
				public void run() {
					Lista_Maquinas
							.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
					SpiMaquinas.setAdapter(Lista_Maquinas);
				}
			});

			SpiMaquinas.setOnItemSelectedListener(new OnItemSelectedListener() {

				public void onItemSelected(AdapterView<?> parentView,
						View selectedItemView, int position, long id) {
					setMaq(SpiMaquinas.getSelectedItem().toString());

					/* hilo que llama el metodo de validar usuario */
					new Thread(new Runnable() {
						@Override
						public void run() {
							self.partesMaquinas(URL_PARTES_MAQUINAS);
							Log.e("ServicioRest",
									"entra a listar las partes de las maquinas");

						}
					}).start();

				}

				public void onNothingSelected(AdapterView<?> parentView) {

				}
			});

		} catch (Exception e) {
			/*
			 * hilo que muestra el mensaje de error de conexion al cargar los
			 * datos
			 */
			runOnUiThread(new Runnable() {
				public void run() {

					AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
							activity);
					mensajeEmergente.setTitle(R.string.tituloError);
					mensajeEmergente.setMessage(R.string.msjERConexionCargar);
					mensajeEmergente.setNeutralButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {

								public void onClick(DialogInterface dialog,
										int which) {
									LavadoMaquina.this.finish();

								}
							});

					mensajeEmergente.create();
					mensajeEmergente.show();
				}
			});
		}
	}

	public void partesMaquinas(String url) {
		Lista_maq = new ArrayList<ItemPartesMaquina>();
		adaptador = new AdaptadorMaquinas(self, Lista_maq);

		try {

			JSONArray maquinas = JsonHelper.getJsonArrayFromUrl(url);

			for (int j = 0; j < maquinas.length(); j++) {
				// se crea un Objeto tipo JSONObject
				JSONObject c = maquinas.getJSONObject(j);

				if (c.getString("nombre").equals(this.getMaq())) {
					for (int i = 0; i <= 6; i++) {

						if (!c.getString("parte_" + (i + 1)).equals("N/A")) {

							Lista_maq.add(new ItemPartesMaquina(c
									.getString("parte_" + (i + 1)), false));
						}
					}
				}

			}

			// correr en un nuevo hilo la UI
			runOnUiThread(new Runnable() {
				@Override
				public void run() {
					lvPartMaq.setAdapter(adaptador);
					lvPartMaq.setDividerHeight(1);
				}
			});

		} catch (Exception e) {
			/*
			 * hilo que muestra el mensaje de error de conexion al cargar los
			 * datos
			 */
			runOnUiThread(new Runnable() {
				public void run() {

					AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
							activity);
					mensajeEmergente.setTitle(R.string.tituloError);
					mensajeEmergente.setMessage(R.string.msjERConexionCargar);
					mensajeEmergente.setNeutralButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {

								public void onClick(DialogInterface dialog,
										int which) {
									LavadoMaquina.this.finish();

								}
							});

					mensajeEmergente.create();
					mensajeEmergente.show();
				}
			});
		}

		// Se le aplica un Listener donde ira lo que tiene que hacer en caso de
		// que sea pulsado
		lvPartMaq.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View v,
					int position, long arg3) {
				ItemPartesMaquina itemPartesmaquina = (ItemPartesMaquina) parent
						.getItemAtPosition(position);

				// En caso de que la posicion seleccionada gracias a "arg2" sea
				// true que lo cambie a false
				if (Lista_maq.get(position).isChekeado()) {
					Lista_maq.get(position).setChekeado(false);
					itemComponent[position][0] = itemPartesmaquina.getParte();
					itemComponent[position][1] = String
							.valueOf(itemPartesmaquina.isChekeado());
				} else {
					// aqui al contrario que la anterior, que lo pase a true.
					Lista_maq.get(position).setChekeado(true);
					itemComponent[position][0] = itemPartesmaquina.getParte();
					itemComponent[position][1] = String
							.valueOf(itemPartesmaquina.isChekeado());

				}

				/*
				 * Se notifica al adaptador de que el ArrayList que tiene
				 * asociado ha sufrido cambios (forzando asi a ir al metodo
				 * getView())
				 */

				adaptador.notifyDataSetChanged();

			}
		});
	}

	// metodo que valida si todo el registro esta completo
	public void validar() {

		if (this.getFechaSistema() != null && this.getTiempoSistema() != null) {
			if (this.getFechaUsuario() != null) {
				if (this.getTiempoUsuario() != null) {

					if (rbAptoLavMaq.isChecked() || rbNoAptoLavMaq.isChecked()) {

						if (!this.etAccLavMaq.getText().equals(STRING_EMPTY)) {

							String observaciones = this.etAccLavMaq.getText()
									.toString();
							observaciones = this.validarcampos
									.DeleteAccents(observaciones);
							this.setAcciones(observaciones);
						}

						this.setDesinfectante(spiDesinfecMaq.getSelectedItem()
								.toString());

						this.setMaquina(this.getMaq());

						this.mensajeRegistro();

					} else {
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.tituloAlerta,
								R.string.msjcondicionMaq, R.string.btnAceptar);

					}

				} else {
					// falta hora
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloAlerta, R.string.msjSelecHora,
							R.string.btnAceptar);
				}
			} else {
				// falta fecha
				manejadorMensajes.alertMessageOneButton(activity,
						R.string.tituloAlerta, R.string.msjSelecFecha,
						R.string.btnAceptar);
			}
		}
	}

	public void btnCheLavMaq(View v) {
		this.fechaHoraSistema();
		this.validar();

		// registro de datos del operario
	}

	public void btnRegFinLavMaq(View v) {
		if (this.salir()) {

			new AlertDialog.Builder(this)
					.setIcon(android.R.drawable.ic_dialog_alert)
					.setTitle(R.string.tituloAlerta)
					.setMessage(R.string.msjPregunta)
					.setNegativeButton(R.string.btnNo, null)// sin listener
					.setPositiveButton(R.string.btnSi,
							new DialogInterface.OnClickListener() {// un
								// listener que al pulsar, cierre la
								// aplicaci�n
								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									// Salir
									Intent intent = new Intent();
									intent.setClass(activity,
											PreProduccion.class);
									startActivity(intent);
								}
							}).show();

		} else {
			Intent intent = new Intent();
			intent.setClass(this, PreProduccion.class);
			startActivity(intent);
		}
	}

	// registro a la base de datos
	public void envioBaseDatos() {

		HttpClient httpClient = new DefaultHttpClient();
		// URL del servidor para guardar los datos de lavadoMaquina
		HttpPost post = new HttpPost(URL_REGISTRO_INSPECCION_MAQUINA);

		try {
			// Construimos el objeto cliente en formato JSON
			JSONObject dato = new JSONObject();

			// se almacenan los datos capturados por los campos de texto en
			// el objeto JSON para enviarlo al servidor.
			dato.put("empleado_id",
					Integer.parseInt(this.getIdOperarioEmpleado()));
			dato.put("desinfectante_id",
					desinfectanteId.get(this.getDesinfectante()));
			dato.put("maquina_id", maquinasId.get(this.getMaquina()));
			dato.put("fecha_usuario", this.getFechaUsuario());
			dato.put("fecha_sistema", this.getFechaSistema());
			dato.put("hora_usuario", this.getTiempoUsuario());
			dato.put("hora_sistema", this.getTiempoSistema());
			dato.put("acciones", this.getAcciones());
			dato.put("estado", this.isCondicion());

			for (int t = 0; t <= 6; t++) {

				dato.put("chequeo_parte" + (t + 1),
						Boolean.parseBoolean(itemComponent[t][1]));

			}

			StringEntity entity = new StringEntity(dato.toString());
			post.setHeader("Content-Type", "application/json; chartset=UTF-8");
			post.setHeader("Accept", "application/json");
			post.setEntity(entity);
			HttpResponse resp = httpClient.execute(post);
			final String respStr = EntityUtils.toString(resp.getEntity());

			if (respStr.equals("true")) {
				Log.e("ServicioRest", "el servidor me retorna true");
				this.setIdOperarioEmpleado(null);
				this.setDesinfectante(null);
				this.setMaquina(null);
				this.setFechaUsuario(null);
				this.setTiempoUsuario(null);
				this.setFechaSistema(null);
				this.setTiempoUsuario(null);
				this.setAcciones(null);

				Log.e("ServicioRest", "esta antes del hilo de msj exitoso");
				// mensaje de respuesta del servidor
				runOnUiThread(new Runnable() {
					public void run() {
						progressDialog.dismiss();
						manejadorMensajes.alertMessageOneButton(activity,
								R.string.msjMuyBien,
								R.string.msjRegistroExitoso,
								R.string.btnAceptar);
						Log.e("ServicioRest",
								"el servidor me retorna true y esta en el mensaje en pantalla");

					}
				});

				this.setSALIR(false);
			} else {
				runOnUiThread(new Runnable() {
					public void run() {

						progressDialog.dismiss();
						AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
								activity);
						mensajeEmergente.setTitle(R.string.tituloError);
						mensajeEmergente.setMessage(respStr);
						mensajeEmergente.setNeutralButton(R.string.btnAceptar,
								new DialogInterface.OnClickListener() {

									public void onClick(DialogInterface dialog,
											int which) {

									}
								});

						mensajeEmergente.create();
						mensajeEmergente.show();
						Log.e("ServicioRest",
								"el servidor no retorna true y esta en el mensaje en pantalla");
					}
				});
			}

		} catch (Exception ex) {
			Log.e("ServicioRest", "me salta al catch de registrar los datos");
			// mensaje de respuesta del servidor
			runOnUiThread(new Runnable() {
				public void run() {
					progressDialog.dismiss();
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloError, R.string.msjERConexionEnviar,
							R.string.btnAceptar);

				}
			});

		}

	}

	// metodo que controla el bot�n atr�s
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {

		if (keyCode == KeyEvent.KEYCODE_BACK) {
			if (this.salir()) {

				new AlertDialog.Builder(this)
						.setIcon(android.R.drawable.ic_dialog_alert)
						.setTitle(R.string.tituloAlerta)
						.setMessage(R.string.msjPregunta)
						.setNegativeButton(R.string.btnNo, null)// sin listener
						.setPositiveButton(R.string.btnSi,
								new DialogInterface.OnClickListener() {// un
									// listener que al pulsar, cierre la
									// aplicaci�n
									@Override
									public void onClick(DialogInterface dialog,
											int which) {
										// Salir
										LavadoMaquina.this.finish();
									}
								}).show();

				// Si el listener devuelve true, significa que el evento esta
				// procesado, y nadie debe hacer nada mas
				return true;
			} else {
				LavadoMaquina.this.finish();
			}
		}
		// para las demas cosas, se reenvia el evento al listener habitual
		return super.onKeyDown(keyCode, event);
	}

	/* verifica si no hay ningun dato en memoria ni en campos */
	public boolean salir() {

		if (this.isSALIR()) {
			return true;
		} else {
			return false;
		}

	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);

		outState.putString("fecha", date);
		outState.putString("hora", time);

	}

	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
		super.onRestoreInstanceState(savedInstanceState);

		this.setFechaUsuario(savedInstanceState.getString("fecha"));
		this.setTiempoUsuario(savedInstanceState.getString("hora"));

	}

}
